// miniprogram/pages/duty/duty.js
const app=getApp()
const { $Message } = require('../../dist/base/index');
var db=app.globalData.db
Page({

  /**
   * 页面的初始数据
   */
  data: {
    tags:{},//提交项目合作的信息展示
    showTags:false,//是否打开项目合作的展示页面
    width:0,//屏幕宽度
    height:0,//屏幕高度
    current_scroll: 'tab1',
    transactions:[],//物品交易的集合
    duties:[],//悬赏任务的集合
    studies:[],//学习组队的集合
    subjects:[],//科研项目的集合
    travels:[],//组队出行的集合
    array1:["待选择","可议价","不可议价"],//物品交易是否可议价
    array2:["待选择","可议价","不可议价"],//悬赏任务是否可议价
    show:false,//是否展示更多信息
    moreInfo:{},//更多信息的集合
    loading:true,//加载动画
    time:Date.parse(new Date()),//当前时间的时间戳
  },
//悬赏里顶部tabs的滚动切换
handleChangeScroll ({ detail }) {
  this.setData({
      current_scroll: detail.key
  });
},
 //点击预览图片
 preview:function(e){
  let temp=[]
  e.currentTarget.dataset.url.forEach(item=>{
    temp.push(item.url)
  })
  wx.previewImage({
    current:temp[e.currentTarget.dataset.i],//当前展示图片链接
    urls: temp,//所有图片链接
  })
},
//选择自己的技能
onChangeTags(e){
  const detail = e.detail;
  this.setData({
      ['tags.tags['+e.detail.name+'].checked'] : detail.checked
  })
},
 //输入搜索物品的关键字及查询功能
 onSearchTransaction(e){
  let transaction=e.detail
  db.collection('publishedTransaction').where({
    name: db.RegExp({
      regexp: transaction,
      options: 'i',
    })
  }).get({
    success:res=>{
      this.setData({
        transactions:res.data
      })
    },
    fail:err=>{
      $Message({
        content: '搜索失败，请重试',
        type: 'error'
    });
    }
  })
},
//打开项目合作的信息展示页
onReceiveTags(e){
  this.indexSubject=e.currentTarget.dataset.index
  this.setData({
    tags:e.currentTarget.dataset.item,
    showTags:true
  })
},
//关闭项目合作的信息展示页
onCloseTags(){
  this.setData({
    showTags:false
  })
},
//输入搜索任务的关键字及查询功能
onSearchDuty(e){
  let duty=e.detail
  db.collection('publishedDuty').where({
    name: db.RegExp({
      regexp: duty,
      options: 'i',
    })
  }).get({
    success:res=>{
      this.setData({
        duties:res.data
      })
    },
    fail:err=>{
      $Message({
        content: '搜索失败，请重试',
        type: 'error'
    });
    }
  })

},
//输入搜索学习计划的关键字及查询功能
onSearchStudy(e){
let study=e.detail
db.collection('publishedStudy').where({
  name: db.RegExp({
    regexp: study,
    options: 'i',
  })
}).get({
  success:res=>{
    this.setData({
      studies:res.data
    })
  },
  fail:err=>{
    $Message({
      content: '搜索失败，请重试',
      type: 'error'
  });
  }
})
},
//输入科研项目的关键字及查询功能
onSearchSubject(e){
let subject=e.detail
db.collection('publishedSubject').where({
  name: db.RegExp({
    regexp: subject,
    options: 'i',
  })
}).get({
  success:res=>{
    this.setData({
      subjects:res.data
    })
  },
  fail:err=>{
    $Message({
      content: '搜索失败，请重试',
      type: 'error'
  });
  }
})
},
//输入出行目的地的关键字及查询功能
onSearchTravel(e){
let travel=e.detail
db.collection('publishedTravel').where({
  travelDestination: db.RegExp({
    regexp: travel,
    options: 'i',
  })
}).get({
  success:res=>{
    this.setData({
      travels:res.data
    })
  },
  fail:err=>{
    $Message({
      content: '搜索失败，请重试',
      type: 'error'
  });
  }
})
},
//物品交易获取更多信息
onGetMoreInfo(e){
this.setData({
  show:true,
  moreInfo:e.currentTarget.dataset.item
})
},
//物品交易中联系卖家
onReceiveTransactions(e){
  if(e.currentTarget.dataset.openid===app.globalData.openid){
    $Message({
      content: '无法购买自己的物品',
      type: 'warning'
  });
    return
  }
  db.collection('publishedTransaction').where({
    _id:e.currentTarget.dataset.id
  }).get({
    success:res=>{
      if(res.data[0].isAccept===1){
        wx.showToast({
          title: "已被人购买，刷新试试",
          icon:'none',
          mask:true
        })
        return
      }
      let temp=res.data[0].contact
      let tempOpenid=res.data[0].othersOpenid
      db.collection('user').where({
        _openid:app.globalData.openid
      }).get({
        success:res=>{
          temp.push({avatar:app.globalData.userInfo.avatarUrl,nickname:app.globalData.userInfo.nickName,phone:res.data[0].phone,wx:res.data[0].wx,position:'买家'})
          tempOpenid.app.globalData.openid=1
          db.collection('publishedTransaction').doc(e.currentTarget.dataset.id).update({
            data:{
              contact:temp,
              isAccept:1,
              othersOpenid:tempOpenid
            },
            success:res=>{
              db.collection('publishedTransaction').orderBy('datetime','desc').where({
                isAccept:0
              }).get({
                success:res=>{
                  $Message({
                    content: '获取成功',
                    type: 'success'
                });
                  this.setData({
                    transactions:res.data,
                  })
                  wx.navigateTo({
                    url: '../receive/receive?number=0',
                  })
                },
                fail:err=>{
                  $Message({
                    content: '获取失败，请重新尝试',
                    type: 'error'
                });
                return
                }
              })
            },
            fail:err=>{
              $Message({
                content: '获取失败，请重新尝试',
                type: 'error'
            });
            return
            }
          })
        },
        fail:err=>{
          $Message({
            content: '获取失败，请重新尝试',
            type: 'error'
        });
        return
        }
      })
    },
    fail:err=>{
      $Message({
        content: '获取失败，请重新尝试',
        type: 'error'
    });
    return
    }
  })
},
//悬赏任务中联系卖家
onReceiveDuties(e){
  if(e.currentTarget.dataset.openid===app.globalData.openid){
    $Message({
      content: '无法接取自己的任务',
      type: 'warning'
  });
    return
  }
  db.collection('publishedDuty').where({
    _id:e.currentTarget.dataset.id
  }).get({
    success:res=>{
      if(res.data[0].isAccept===1){
        wx.showToast({
          title: "已被人接取，刷新试试",
          icon:'none',
          mask:true
        })
        return
      }
      let temp=res.data[0].contact
      let tempOpenid=res.data[0].othersOpenid
      db.collection('user').where({
        _openid:app.globalData.openid
      }).get({
        success:res=>{
          temp.push({avatar:app.globalData.userInfo.avatarUrl,nickname:app.globalData.userInfo.nickName,phone:res.data[0].phone,wx:res.data[0].wx,position:'镖师'})
          tempOpenid.app.globalData.openid=1
          db.collection('publishedDuty').doc(e.currentTarget.dataset.id).update({
            data:{
              contact:temp,
              isAccept:1,
              othersOpenid:tempOpenid
            },
            success:res=>{
              db.collection('publishedDuty').orderBy('datetime','desc').where({
                isAccept:0
              }).get({
                success:res=>{
                  $Message({
                    content: '获取成功',
                    type: 'success'
                });
                  this.setData({
                    transactions:res.data,
                  })
                  wx.navigateTo({
                    url: '../receive/receive?number=1',
                  })
                },
                fail:err=>{
                  $Message({
                    content: '获取失败，请重新尝试',
                    type: 'error'
                });
                return
                }
              })
            },
            fail:err=>{
              $Message({
                content: '获取失败，请重新尝试',
                type: 'error'
            });
            return
            }
          })
        },
        fail:err=>{
          $Message({
            content: '获取失败，请重新尝试',
            type: 'error'
        });
        return
        }
      })
    },
    fail:err=>{
      $Message({
        content: '获取失败，请重新尝试',
        type: 'error'
    });
    return
    }
  })
},
//学习组队中加入队伍
onReceiveStudies(e){
  if(e.currentTarget.dataset.openid===app.globalData.openid){
    $Message({
      content: '无法加入自己创建的队伍',
      type: 'warning'
  });
    return
  }
  var flag=false
  this.data.studies[e.currentTarget.dataset.index].contact.forEach((item)=>{
    if(item.phone===app.globalData.phone){
      flag=true
    }
  })
  if(flag){
    $Message({
      content: '无法重复加入同一支队伍',
      type: 'warning'
  });
    return
  }
  //查询并更新数据库
  db.collection('publishedStudy').where({
    _id:e.currentTarget.dataset.id
  }).get({
    success:res=>{
      if(res.data[0].isAccept===1){
        wx.showToast({
          title: "队伍已满，刷新试试",
          icon:'none',
          mask:true
        })
        return
      }
      let temp=res.data[0].contact
      let tempOpenid=res.data[0].othersOpenid
      let count=res.data[0].count+1
      let maxNum=res.data[0].teamSize
      db.collection('user').where({
        _openid:app.globalData.openid
      }).get({
        success:res=>{
          temp.push({avatar:app.globalData.userInfo.avatarUrl,nickname:app.globalData.userInfo.nickName,phone:res.data[0].phone,wx:res.data[0].wx,position:'镖师'})
          tempOpenid.app.globalData.openid=1
          db.collection('publishedStudy').doc(e.currentTarget.dataset.id).update({
            data:{
              contact:temp,
              isAccept:count>=maxNum?1:0,
              othersOpenid:tempOpenid,
              count:count
            },
            success:res=>{
              db.collection('publishedStudy').orderBy('datetime','desc').where({
                isAccept:0
              }).get({
                success:res=>{
                  $Message({
                    content: '加入成功',
                    type: 'success'
                });
                  this.setData({
                    transactions:res.data,
                  })
                  wx.navigateTo({
                    url: '../receive/receive?number=2',
                  })
                },
                fail:err=>{
                  $Message({
                    content: '获取失败，请重新尝试',
                    type: 'error'
                });
                return
                }
              })
            },
            fail:err=>{
              $Message({
                content: '获取失败，请重新尝试',
                type: 'error'
            });
            return
            }
          })
        },
        fail:err=>{
          $Message({
            content: '获取失败，请重新尝试',
            type: 'error'
        });
        return
        }
      })
    },
    fail:err=>{
      $Message({
        content: '获取失败，请重新尝试',
        type: 'error'
    });
    return
    }
  })
},
//科研合作中加入项目
onReceiveSubjects(e){
  if(e.currentTarget.dataset.openid===app.globalData.openid){
    $Message({
      content: '无法重复加入自己的队伍',
      type: 'warning'
  });
    return
  }
  var flag=false
  this.data.subjects[this.indexSubject].contact.forEach((item)=>{
    if(item.phone===app.globalData.phone){
      flag=true
    }
  })
  if(flag){
    $Message({
      content: '无法重复加入同一支队伍',
      type: 'warning'
  });
    return
  }
   //查询并更新数据库
   db.collection('publishedSubject').where({
    _id:e.currentTarget.dataset.id
  }).get({
    success:res=>{
      if(res.data[0].isAccept===1){
        wx.showToast({
          title: "队伍已满，刷新试试",
          icon:'none',
          mask:true
        })
        return
      }
      let temp=res.data[0].contact
      let tempOpenid=res.data[0].othersOpenid
      let count=res.data[0].count+1
      let maxNum=res.data[0].subjectSize
      let tempTags=[]
      db.collection('user').where({
        _openid:app.globalData.openid
      }).get({
        success:res=>{
          this.data.tags.tags.forEach((item)=>{
            if(item.flag===0&&item.checked){
              tempTags.push(item.value)
              item.flag=1
            }
          })
          temp.push({avatar:app.globalData.userInfo.avatarUrl,nickname:app.globalData.userInfo.nickName,phone:res.data[0].phone,wx:res.data[0].wx,position:'镖师',tags:tempTags})
          tempOpenid.app.globalData.openid=1
          db.collection('publishedSubject').doc(e.currentTarget.dataset.id).update({
            data:{
              contact:temp,
              isAccept:count>=maxNum?1:0,
              othersOpenid:tempOpenid,
              count:count,
              tags:this.data.tags
            },
            success:res=>{
              db.collection('publishedSubject').orderBy('datetime','desc').where({
                isAccept:0
              }).get({
                success:res=>{
                  $Message({
                    content: '加入成功',
                    type: 'success'
                });
                  this.setData({
                    transactions:res.data,
                  })
                  wx.navigateTo({
                    url: '../receive/receive?number=2',
                  })
                },
                fail:err=>{
                  $Message({
                    content: '获取失败，请重新尝试',
                    type: 'error'
                });
                return
                }
              })
            },
            fail:err=>{
              $Message({
                content: '获取失败，请重新尝试',
                type: 'error'
            });
            return
            }
          })
        },
        fail:err=>{
          $Message({
            content: '获取失败，请重新尝试',
            type: 'error'
        });
        return
        }
      })
    },
    fail:err=>{
      $Message({
        content: '获取失败，请重新尝试',
        type: 'error'
    });
    return
    }
  })
},
//组队出行中加入车队
onReceiveTravels(e){
  if(e.currentTarget.dataset.openid===app.globalData.openid){
    $Message({
      content: '无法重复加入自己的队伍',
      type: 'warning'
  });
    return
  }
  //判断是否重复加入同一支队伍
  var flag=false
  this.data.travels[e.currentTarget.dataset.index].contact.forEach((item)=>{
    if(item.phone===app.globalData.phone){
      flag=true
    }
  })
  if(flag){
    $Message({
      content: '无法重复加入同一支队伍',
      type: 'warning'
  });
    return
  }
 //查询并更新数据库
 db.collection('publishedTravel').where({
  _id:e.currentTarget.dataset.id
}).get({
  success:res=>{
    if(res.data[0].isAccept===1){
      wx.showToast({
        title: "队伍已满，刷新试试",
        icon:'none',
        mask:true
      })
      return
    }
    let temp=res.data[0].contact
    let tempOpenid=res.data[0].othersOpenid
    let count=res.data[0].count+1
    let maxNum=res.data[0].travelSize
    db.collection('user').where({
      _openid:app.globalData.openid
    }).get({
      success:res=>{
        temp.push({avatar:app.globalData.userInfo.avatarUrl,nickname:app.globalData.userInfo.nickName,phone:res.data[0].phone,wx:res.data[0].wx,position:'镖师'})
        tempOpenid.app.globalData.openid=1
        db.collection('publishedTravel').doc(e.currentTarget.dataset.id).update({
          data:{
            contact:temp,
            isAccept:count>=maxNum?1:0,
            othersOpenid:tempOpenid,
            count:count
          },
          success:res=>{
            db.collection('publishedTravel').orderBy('datetime','desc').where({
              isAccept:0
            }).get({
              success:res=>{
                $Message({
                  content: '加入成功',
                  type: 'success'
              });
                this.setData({
                  transactions:res.data,
                })
                wx.navigateTo({
                  url: '../receive/receive?number=2',
                })
              },
              fail:err=>{
                $Message({
                  content: '获取失败，请重新尝试',
                  type: 'error'
              });
              return
              }
            })
          },
          fail:err=>{
            $Message({
              content: '获取失败，请重新尝试',
              type: 'error'
          });
          return
          }
        })
      },
      fail:err=>{
        $Message({
          content: '获取失败，请重新尝试',
          type: 'error'
      });
      return
      }
    })
  },
  fail:err=>{
    $Message({
      content: '获取失败，请重新尝试',
      type: 'error'
  });
  return
  }
})
},
//点击关闭更多信息
onClose(){
this.setData({
  show:false
})
},
//异步操作同步化，同步加载所有初始数据
async loadOriginData(){
       //初始化时加载所有搜索结果
      await db.collection('publishedDuty').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            duties:res.data,
          })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      await db.collection('publishedStudy').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            studies:res.data,
          })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      await db.collection('publishedSubject').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            subjects:res.data,
          })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      await db.collection('publishedTravel').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            travels:res.data,
          })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      await db.collection('publishedTransaction').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            transactions:res.data,

          })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      this.setData({
        loading:false
      })
},
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
      //初始化获取手机屏幕大小
      wx.getSystemInfo({
        success: (result) => {
          this.setData({
            width:result.windowWidth,
            height:result.windowHeight
          })
        },
      })
      this.loadOriginData()

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    //完善个人信息后才可接取悬赏
    db.collection('user').where({
      _openid:app.globalData.openid
    }).get({
      success:res=>{
        if(res.data.length===0){
          wx.showModal({
            title:"完善个人信息后才能接取悬赏，是否前往完善个人信息？",
            confirmColor: 'red',
            confirmText:'前往',
            cancelText:'返回',
            success:res=>{
              if (res.confirm) {
                wx.navigateTo({
                  url: '../info/info',
                })
              } else if (res.cancel) {
                wx.navigateBack({
                  delta: 1
                })
              }
            }
          })
        }
      },
      fail:err=>{
        wx.navigateTo({
          url: '../duty/duty',
        })
      }
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    switch(this.data.current_scroll){
      case 'tab1':
      this.setData({
        transactions:[]
      })
      db.collection('publishedTransaction').orderBy('datetime','desc').where({
        isAccept:0
      }).get({
        success:res=>{
          this.setData({
            transactions:res.data,
          })
        wx.stopPullDownRefresh({
          success: (res) => {},
          fail:err=>{
            $Message({
              content: '刷新失败，请重新尝试',
              type: 'error'
          });
          }
        })
        },
        fail:err=>{
          $Message({
            content: '查询失败，请重新尝试',
            type: 'error'
        });
        }
      })
      break
      
      case 'tab2':
        this.setData({
          duties:[]
        })
        db.collection('publishedDuty').orderBy('datetime','desc').where({
          isAccept:0
        }).get({
          success:res=>{
            this.setData({
              duties:res.data,
            })
          wx.stopPullDownRefresh({
            success: (res) => {},
            fail:err=>{
              $Message({
                content: '刷新失败，请重新尝试',
                type: 'error'
            });
            }
          })
          },
          fail:err=>{
            $Message({
              content: '查询失败，请重新尝试',
              type: 'error'
          });
          }
        })
      break
      case 'tab3':
        this.setData({
          studies:[]
        })
        db.collection('publishedStudy').orderBy('datetime','desc').where({
          isAccept:0
        }).get({
          success:res=>{
            this.setData({
              studies:res.data,
            })
          wx.stopPullDownRefresh({
            success: (res) => {},
            fail:err=>{
              $Message({
                content: '刷新失败，请重新尝试',
                type: 'error'
            });
            }
          })
          },
          fail:err=>{
            $Message({
              content: '查询失败，请重新尝试',
              type: 'error'
          });
          }
        })
      break
      case 'tab4':
        this.setData({
          subjects:[]
        })
        db.collection('publishedSubject').orderBy('datetime','desc').where({
          isAccept:0
        }).get({
          success:res=>{
            this.setData({
              subjects:res.data,
            })
          wx.stopPullDownRefresh({
            success: (res) => {},
            fail:err=>{
              $Message({
                content: '刷新失败，请重新尝试',
                type: 'error'
            });
            }
          })
          },
          fail:err=>{
            $Message({
              content: '查询失败，请重新尝试',
              type: 'error'
          });
          }
        })
      break
      case 'tab5':
        this.setData({
          travels:[]
        })
        db.collection('publishedTravel').orderBy('datetime','desc').where({
          isAccept:0
        }).get({
          success:res=>{
            this.setData({
                travels:res.data,
            })
          wx.stopPullDownRefresh({
            success: (res) => {},
            fail:err=>{
              $Message({
                content: '刷新失败，请重新尝试',
                type: 'error'
            });
            }
          })
          },
          fail:err=>{
            $Message({
              content: '查询失败，请重新尝试',
              type: 'error'
          });
          }
        })
      break

    }
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})